84be9172bd9938c102978f842d63615cee4d0e92,src/main/java/com/continuuity/gateway/connector/AppFabricRestHandler.java,AppFabricRestHandler,handleFlowletOperation,#MessageEvent#HttpRequest#GatewayMetricsHelperWrapper#AppFabricService.Client#AuthToken#FlowIdentifier#String#Map#,386

Before Change



    // looking for ?op=instances
    List<String> operations = parameters.get("op");
    if (operations == null || operations.size() == 0) {
      LOG.trace("Parameter 'op' is missing.");
      respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST);
      metricsHelper.finish(BadRequest);
      return;
    } else if (operations.size() > 1) {
      LOG.trace("More than one 'op' parameter specified.");
      respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST);
      metricsHelper.finish(BadRequest);
      return;
    } else if (operations.size() == 1 && !SUPPORTED_FLOWLET_OPERATIONS.contains(operations.get(0))) {
      LOG.trace("Unsupported flowlet operation {}.", operations.get(0));
      respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST);
      metricsHelper.finish(BadRequest);
      return;
    }

    if (request.getMethod() == HttpMethod.GET) { // retrieve number of flowlet instances
      String flowDefJson = client.getFlowDefinition(flowIdent);
      if (flowDefJson == null) {
        LOG.error("Failed to get number of flowlet instances.");
        respondError(message.getChannel(), HttpResponseStatus.INTERNAL_SERVER_ERROR);
        metricsHelper.finish(Error);
        return;
      }
      FlowDefinitionImpl flowDef = new Gson().fromJson(flowDefJson, FlowDefinitionImpl.class);
      for (FlowletDefinition flowletDef : flowDef.getFlowlets()) {
        if (flowletDef.getName().equals(flowletId)) {
          byte[] response = Bytes.toBytes("{\"instances\":" + flowletDef.getInstances() + "}");
          respondJson(message.getChannel(), request, HttpResponseStatus.OK, response);
          metricsHelper.finish(Success);
          return;
        }
      }
      LOG.trace("Flowlet {} does not exist.", flowletId);
      respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST);
      metricsHelper.finish(BadRequest);

After Change


          new InputStreamReader(new ChannelBufferInputStream(request.getContent()), Charsets.UTF_8);
        Map<String, String> valueMap = new Gson().fromJson(reader, new TypeToken<Map<String, String>>() {}.getType());
        if (valueMap.get("instances") == null) {
          respondError(message.getChannel(), HttpResponseStatus.BAD_REQUEST,
                       "Parameter 'instances' is missing in JSON body of Http Request.", true);
          metricsHelper.finish(BadRequest);
        } else {
          short numInstances = Short.parseShort(valueMap.get("instances"));